package pe.edu.upc.e41a.javasoft.service;

import java.util.List;

import javax.persistence.TypedQuery;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upc.e41a.javasoft.domain.TipoPersona;


@Service
@Transactional
public class TipoPersonaServiceImpl implements TipoPersonaService {

	public long countAllTipoPersonas() {
        return TipoPersona.countTipoPersonas();
    }

	public void deleteTipoPersona(TipoPersona tipoPersona) {
        tipoPersona.remove();
    }

	public TipoPersona findTipoPersona(Integer id) {
        return TipoPersona.findTipoPersona(id);
    }

	public List<TipoPersona> findAllTipoPersonas() {
        return TipoPersona.findAllTipoPersonas();
    }

	public List<TipoPersona> findTipoPersonaEntries(int firstResult, int maxResults) {
        return TipoPersona.findTipoPersonaEntries(firstResult, maxResults);
    }

	public void saveTipoPersona(TipoPersona tipoPersona) {
        tipoPersona.persist();
    }

	public TipoPersona updateTipoPersona(TipoPersona tipoPersona) {
        return tipoPersona.merge();
    }
	
	
	//DESDE PROYECTO SCV
	
	public String insertarTipoPersona(TipoPersona tipoPersona) {
		String mensaje =null;
		try {
			tipoPersona.persist();
			mensaje="El tipo de persona: "+tipoPersona.getDescripcion() +" se registró exitosamente";
		} catch (Exception e) {
			mensaje="Error al registrar el tipo de persona";
			return mensaje;
		}
		return mensaje;
	}

	
	public String actualizarTipoPersona(TipoPersona tipoPersona) {
		String mensaje =null;
		try {
			tipoPersona.merge();
			mensaje="El tipo de persona se actualizó exitosamente";
		} catch (Exception e) {
			mensaje="Error al actualizar el tipo de persona";
			return mensaje;
		}
		return mensaje;
	}

	
	public String eliminarTipoPersona(TipoPersona tipoPersona) {
		String mensaje =null;
		try {
			tipoPersona.remove();
			mensaje="El tipo de persona se eliminó exitosamente";
		} catch (Exception e) {
			mensaje="Error al eliminar el tipo de persona";
			return mensaje;
		}
		return mensaje;
	}

	
	public long contarTipoPersonas() {
		return TipoPersona.countTipoPersonas();
	}

	
	public List<TipoPersona> buscarTodoTipoPersonas() {
		return TipoPersona.findAllTipoPersonas();
	}

	
	public TipoPersona buscarTipoPersonaPorCodigo(Integer codigo) {
		return TipoPersona.findTipoPersona(codigo);
	}

	
	public TipoPersona buscarTipoPersonasPorDescripcionExacta(String descripcion) {
		TypedQuery<TipoPersona> tipoPersona = TipoPersona.findTipoPersonasByDescripcionEquals(descripcion);
		TipoPersona tipoPersonaresultado = tipoPersona.getSingleResult();
		return tipoPersonaresultado;
	}

	
	public List<TipoPersona> buscarTipoPersonasPorDescripcionParecida(
			String descripcion) {
		TypedQuery<TipoPersona> tipoPersona =TipoPersona.findTipoPersonasByDescripcionEquals(descripcion);
		List<TipoPersona> tipoPersonaresultado =tipoPersona.getResultList();
		return tipoPersonaresultado;
	}


	public TipoPersona obtenerTipoPersona(String idTipoPersona) {
		return TipoPersona.findTipoPersona(Integer.parseInt(idTipoPersona));
	}
	
	
}
